package com.ruoyi.ruoyiserver.utils;

import java.util.UUID;

/**
 * UUID工具类
 *
 * @author yanglingxi
 */
public class UUIDUtils {

    /**
     * 生成一个随机的UUID
     *
     * @return 随机生成的UUID字符串
     */
    public static String generateRandomUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 生成一个没有横线的随机UUID字符串
     *
     * @return 没有横线的UUID字符串
     */
    public static String generateNoDashedUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 生成一个基于时间的UUID（UUID版本1）
     *
     * @return 基于时间的UUID字符串
     */
    public static String generateTimeBasedUUID() {
        // 这里使用UUID.nameUUIDFromBytes方法来生成基于时间的UUID
        // 通常使用MAC地址和时间戳来生成，这里简化为使用当前时间戳
        return UUID.nameUUIDFromBytes(
                ("" + System.currentTimeMillis()).getBytes()).toString();
    }

    /**
     * 从字符串解析UUID
     *
     * @param uuidStr UUID字符串
     * @return 解析后的UUID对象，如果字符串格式不正确，则返回null
     */
    public static UUID parseUUID(String uuidStr) {
        try {
            return UUID.fromString(uuidStr);
        } catch (IllegalArgumentException e) {
            // 错误的UUID格式
            return null;
        }
    }

    /**
     * 比较两个UUID
     *
     * @param uuid1 第一个UUID字符串
     * @param uuid2 第二个UUID字符串
     * @return 如果两个UUID相等返回true，否则返回false
     */
    public static boolean equals(UUID uuid1, UUID uuid2) {
        return uuid1.equals(uuid2);
    }

    /**
     * 获取UUID的版本
     *
     * @param uuidStr UUID字符串
     * @return UUID的版本，如果UUID格式不正确，则返回-1
     */
    public static int getUUIDVersion(String uuidStr) {
        UUID uuid = parseUUID(uuidStr);
        return uuid != null ? uuid.version() : -1;
    }

    /**
     * 获取UUID的变种
     *
     * @param uuidStr UUID字符串
     * @return UUID的变种，如果UUID格式不正确，则返回-1
     */
    public static int getUUIDVariant(String uuidStr) {
        UUID uuid = parseUUID(uuidStr);
        return uuid != null ? uuid.variant() : -1;
    }

}
